﻿using System;
using System.Collections.Generic;
using System.Web.UI.WebControls;
using vudu.EnlaceDatos.SqlServer;
using vudu.Logica.Clases;
using vudu.Logica.Excepciones;

namespace vudu.PaginasWeb.G10Salon
{
    /// <summary>
    /// Clase que se encarga de todas las operaciones sobre la ventana de Gestionar Salon
    /// </summary>
    public partial class GestionarSalon : System.Web.UI.Page
    {
        #region Atributos

        private List<Salon> _lista;
        private Salon _salonSeleccionado;
        private Universidad _universidad;

        #endregion

        #region Metodos

        /// <summary>
        /// Metodo que se ejecuta cuando se abre la pagina por primera vez
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Page_Load(object sender, EventArgs e)
        {
            if ((Session["rol"] != null) && (((string)Session["rol"]).Equals("Universidad")))
            {
                _universidad = (Universidad)Session["Usuario"];
                InformacionUsuario.Text = (string)Session["rol"] + ": " + _universidad.Nombre;
            }
            else if ((Session["rol"] == null) || (((string)Session["rol"]).Equals("Universidad")))
            {
                Response.Redirect("../G3AccesoSistema/InicioSistema.aspx");
            }

            if (!IsPostBack)
            {
                panelEditarSalon.Visible = false;
                panelGridSalones.Visible = false;
                buscarSalon.Visible = true;
                botonBuscar.Visible = true;
                Aceptar.Visible = false;
                Cancelar.Visible = false;
                MensajeError.Visible = false;
                MensajeFinal.Visible = false;
                tituloPagina.Text = "Consultar Salón";
                infoPagina.Text = "Consultar Salón";
            }
            else
            {
                if (Session["listaSalones"] != null)
                    _lista = (List<Salon>)Session["listaSalones"];
                if (Session["_salonSeleccionado"] != null)
                    _salonSeleccionado = (Salon)Session["_salonSeleccionado"];
            }
        }


        /// <summary>
        /// Metodo que se ejecuta cuando se da click al boton buscar
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Button1Click(object sender, EventArgs e)
        {
            try
            {
                MensajeError.Visible = false;
                MensajeFinal.Visible = false;
                SqlServerSalon baseDatos = new SqlServerSalon();
                switch (int.Parse(tipoBusqueda.SelectedValue))
                {
                    case 1:
                        _lista = baseDatos.ConsultarSalonNombre(tbBusqueda.Text, _universidad);
                        break;
                    case 2:
                        _lista = baseDatos.ConsultarSalonTipo(tbBusqueda.Text, _universidad);
                        break;
                    case 3:
                        _lista = baseDatos.ConsultarSalonEdificio(tbBusqueda.Text, _universidad);
                        break;
                    case 4:
                        _lista = baseDatos.ConsultarSalonInabilitados(_universidad);
                        break;
                }
                if(_lista.Count > 0)
                {
                    panelGridSalones.Visible = true;
                    gridSalones.DataSource = _lista;
                    gridSalones.DataBind();
                    Session["listaSalones"] = _lista;   
                }
                else
                {
                    MensajeError.InnerText = "No Existen Salones que coincidan con la busqueda";
                    MensajeError.Visible = true;
                    Session["listaSalones"] = null;
                    panelGridSalones.Visible = false;
                }
            }
            catch (ConexionExeption)
            {
                MensajeError.InnerText = "No Se pudo Realizar La Busqueda Error con la conexion";
                MensajeError.Visible = true;
            }
            catch (TransaccionFallidaExeption)
            {
                MensajeError.InnerText = "No Se pudo Realizar La Busqueda Error con la conexion";
                MensajeError.Visible = true;
            }


        }


        /// <summary>
        /// Metodo que se ejecuta cuando se selecciona un salon de la lista
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void GridSalonesSelectedIndexChanged1(object sender, EventArgs e)
        {
            int opion = ((GridView)sender).SelectedIndex;


            Session["_salonSeleccionado"] = _lista[opion];
            panelEditarSalon.Visible = true;
            panelGridSalones.Visible = false;
            buscarSalon.Visible = false;
            botonBuscar.Visible = false;
            Aceptar.Visible = true;
            Cancelar.Visible = true;

            tituloPagina.Text = "Modificar Salón";
            infoPagina.Text = "Modificar Salón";
            CheckBox1.Checked = (_lista[opion].Status == 1);
            CheckBox1.Enabled = !CheckBox1.Checked;
            tbNombreSalon.Text = _lista[opion].Nombre;
            tbEdificio.Text = _lista[opion].Edificio;
            tbCapacidad.Text = _lista[opion].Capacidad.ToString();
            SeleccionarTipo(_lista[opion].Tipo);
        }


        /// <summary>
        /// Metodo que seleccionar en combo el tipo de salon segun el string que se pasa
        /// </summary>
        /// <param name="tipo"></param>
        private void SeleccionarTipo(string tipo)
        {
            for (int i = 0; i < ddlTipoSalon.Items.Count; i++)
            {
                if (ddlTipoSalon.Items[i].Text.Equals(tipo))
                {
                    ddlTipoSalon.SelectedIndex = i;
                }
            }
        }


        /// <summary>
        /// Metodo que se ejecuta cuando se le da click al boton aceptar
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void AceptarClick(object sender, EventArgs e)
        {
            try
            {

                _salonSeleccionado.Edificio = tbEdificio.Text;
                _salonSeleccionado.Capacidad = int.Parse(tbCapacidad.Text);
                _salonSeleccionado.Tipo = ddlTipoSalon.SelectedValue;
                _salonSeleccionado.Nombre = tbNombreSalon.Text;
                _salonSeleccionado.Status = (CheckBox1.Checked) ? 1 : 0;
                _salonSeleccionado.Universidad = _universidad;
                SqlServerSalon baseDatos = new SqlServerSalon();
                baseDatos.ModificarSalon(_salonSeleccionado);
                panelEditarSalon.Visible = false;
                panelGridSalones.Visible = false;
                buscarSalon.Visible = true;
                botonBuscar.Visible = true;
                Aceptar.Visible = false;
                Cancelar.Visible = false;

                tituloPagina.Text = "Consultar Salón";
                infoPagina.Text = "Consultar Salón";
                MensajeFinal.InnerText = "Se ha Editado El Salon con Exito";
                MensajeFinal.Visible = true;
                tbBusqueda.Text = "";
            }
            catch (ConexionExeption)
            {
                MensajeError.Visible = true;
            }
            catch (TransaccionFallidaExeption)
            {
                MensajeError.Visible = true;
            }

        }


        /// <summary>
        ///Metodo que se ejecuta cuando se le da click al boton cancelar
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void CancelarClick(object sender, EventArgs e)
        {

            panelEditarSalon.Visible = false;
            panelGridSalones.Visible = false;
            buscarSalon.Visible = true;
            MensajeError.Visible = false;
            MensajeFinal.Visible = false;
            botonBuscar.Visible = true;
            Aceptar.Visible = false;
            Cancelar.Visible = false;
        }


        /// <summary>
        /// Metodo que se ejecuta cuando se le da click al boton de eliminar en la lista de salones
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void GridSalonesDeletedRow(object sender, GridViewDeleteEventArgs e)
        {
            try
            {
                if(_lista != null)
                {
                    int opion = e.RowIndex;
                    _lista[opion].Status = 0;
                    _lista[opion].Universidad = _universidad;
                    SqlServerSalon baseDatos = new SqlServerSalon();
                    baseDatos.ModificarSalon(_lista[opion]);
                    _lista.RemoveAt(e.RowIndex);
                    if(_lista.Count != 0)
                        Session["listaSalones"] = _lista;
                    else
                        Session["listaSalones"] = null;
                }
                gridSalones.DataSource = _lista;
                gridSalones.DataBind();
                MensajeFinal.InnerText = "Se Deshabilitado El Salon con Exito";
                MensajeFinal.Visible = true;
                tbBusqueda.Text = "";
            }
            catch (ConexionExeption)
            {
                MensajeError.Visible = true;
            }
            catch (TransaccionFallidaExeption)
            {
                MensajeError.Visible = true;
            }
        }
        #endregion

        
    }
}